#include "gtrans.h"
#include "ui_gtrans.h"

void GTrans::activerCommandesRemise(bool checked){

    ui->buttonRemiseNouveau->setEnabled(checked);
    ui->buttonRemiseOuvrir->setEnabled(checked);
    ui->buttonRemiseFermer->setEnabled(!checked);
    ui->buttonRemiseAppliquer->setEnabled(!checked);
    ui->buttonRemiseImprimer->setEnabled(!checked);

}

void GTrans::connecterTemp(){

    // Création du model des remises
    modelRemise = new QSqlTableModel(this,dbRemise);
    modelRemise->setTable("remise");
    modelRemise->setEditStrategy(QSqlTableModel::OnManualSubmit);
    modelRemise->select();
    modelRemise->setHeaderData(0,Qt::Horizontal,"Id");
    modelRemise->setHeaderData(1,Qt::Horizontal,"Nom");
    modelRemise->setHeaderData(2,Qt::Horizontal,"Prénom");
    modelRemise->setHeaderData(3,Qt::Horizontal,"Banque");
    modelRemise->setHeaderData(4,Qt::Horizontal,"Numéro CHQ");
    modelRemise->setHeaderData(5,Qt::Horizontal,"Montant en €");
    ui->tableRemiseNouveaux->setModel(modelRemise);
    ui->tableRemiseNouveaux->resizeColumnsToContents();

    MoneyDelegate *m1 = new MoneyDelegate(ui->tableRemiseNouveaux);
    ui->tableRemiseNouveaux->setItemDelegateForColumn(5,m1);

    modelRemiseDetail = new QSqlTableModel(this,dbRemise);
    modelRemiseDetail->setTable("details");
    modelRemiseDetail->setEditStrategy(QSqlTableModel::OnManualSubmit);
    modelRemiseDetail->setFilter("remise = 0");
    modelRemiseDetail->setSort(0,Qt::AscendingOrder);
    modelRemiseDetail->select();
    modelRemiseDetail->setHeaderData(0,Qt::Horizontal,"Id");
    modelRemiseDetail->setHeaderData(1,Qt::Horizontal,"Remise");
    modelRemiseDetail->setHeaderData(2,Qt::Horizontal,"Bucque");
    modelRemiseDetail->setHeaderData(3,Qt::Horizontal,"Fam's");
    modelRemiseDetail->setHeaderData(4,Qt::Horizontal,"Prom's");
    modelRemiseDetail->setHeaderData(5,Qt::Horizontal,"Montant en €");
    ui->tableRemiseAjoutPartage->setModel(modelRemiseDetail);

    MoneyDelegate *m2 = new MoneyDelegate(ui->tableRemiseAjoutPartage);
    ui->tableRemiseAjoutPartage->setItemDelegateForColumn(5,m2);
    ui->tableRemiseAjoutPartage->resizeColumnsToContents();

}

void GTrans::on_buttonRemiseFermer_clicked()
{
    // Traitement pour la sauvegarde
    // On ferme la base
    dbRemise.close();
    QSqlDatabase::removeDatabase("dbRemise");

    if(cheminBase == "tmp.sqlite"){

        if(QMessageBox::question(this,"Fichier temporaire","Voulez vous sauvegarder votre remise (conseillé) ?") == QMessageBox::Yes){
            // Sauvegarde on-line ou locale
            QString save = QFileDialog::getSaveFileName(this,"Sauvegarde","","*.sqlite");

            // Copie du fichier temp ou envoi au serveur
            if(!QFile::copy(cheminBase,save)){
                QMessageBox::critical(this,"Erreur","La sauvegarde a échouée.");
                return;
            }
        }

        QFile::remove(cheminBase);
    }


    // ***

    // Remise à zéro et désactivation de tous les champs du groupRemiseDetail (même les noms des boutons et box)
    delete modelRemise;
    delete modelRemiseDetail;

    ui->checkRemiseAjoutPartage->setChecked(false);
    ui->groupRemiseDetailAjout->setTitle("Ajouter un chèque");
    ui->groupRemiseDetail->setTitle("Nouveau");
    ui->groupRemiseDetail->setEnabled(false);

    activerCommandesRemise(true);
    // ***

}

void GTrans::on_buttonRemiseNouveau_clicked()
{

    cheminBase = "tmp.sqlite";
    QFile fichier(cheminBase);
    if(fichier.exists()){
        if(QMessageBox::question(this,"Fichier existant","Il existe déjà une remise non sauvegardée. Voulez vous la supprimer?") == QMessageBox::No){
            return;
        }
        fichier.remove();
    }

    dbRemise = QSqlDatabase::addDatabase("QSQLITE","dbremise");
    dbRemise.setHostName("localhost");
    dbRemise.setDatabaseName(cheminBase);
    dbRemise.setUserName("root");
    dbRemise.setPassword("");
    if(dbRemise.open()){
        //Créer tables

        QSqlQuery q("CREATE TABLE remise (id INTEGER PRIMARY KEY AUTOINCREMENT, nom TEXT, prenom TEXT, banque TEXT, numero TEXT, montant NUMERIC)",dbRemise);
        q.exec();
        q.finish();
        QSqlQuery q1("CREATE TABLE details (id INTEGER PRIMARY KEY AUTOINCREMENT, remise NUMERIC, bucque TEXT, fams NUMERIC, proms TEXT, montant NUMERIC)",dbRemise);
        q1.exec();
        q1.finish();

        connecterTemp();

        // Activation du groupBox Detail
        ui->groupRemiseDetail->setEnabled(true);
        idRemiseSelected = 0;
        activerCommandesRemise(false);

        //On donne le focus à la fams pour ajout
        ui->spinRemiseAjoutFams->setFocus(Qt::TabFocusReason);

    }

    // ***

}

void GTrans::on_buttonRemiseOuvrir_clicked()
{


    // Traitement de l'ouverture du fichier

    // Recherche du fichier
    cheminBase = QFileDialog::getOpenFileName(this,"Ouvrir","","*.sqlite");
    QFile fichier(cheminBase);
    if(!fichier.exists()){
        QMessageBox::warning(this,"Fichier non existant","Ce fichier n'existe pas");
        return;
    }
    dbRemise = QSqlDatabase::addDatabase("QSQLITE","dbremise");
    dbRemise.setHostName("localhost");
    dbRemise.setDatabaseName(cheminBase);
    dbRemise.setUserName("root");
    dbRemise.setPassword("");
    if(dbRemise.open()){

        // Affichage des infos dans les vues
        connecterTemp();

        // Activation du groupBox Detail
        ui->groupRemiseDetail->setEnabled(true);
        idRemiseSelected = 0;
        activerCommandesRemise(false);
    }

    // ***

}

void GTrans::on_tableRemiseNouveaux_clicked(const QModelIndex &index)
{
    //On passe en mode modif
    ui->buttonRemiseFermer->setEnabled(false);
    ui->buttonRemiseAppliquer->setEnabled(false);
    ui->buttonRemiseImprimer->setEnabled(false);
    ui->buttonRemiseAjoutSupprimer->setEnabled(true);
    ui->buttonRemiseAjoutValider->setText("Valider");
    ui->buttonRemiseAjoutValider->setIcon(QIcon(":/icons/ressources/dialog-ok-apply.png"));
    ui->groupRemiseDetailAjout->setTitle("Modifier un chèque");

    ui->tableRemiseNouveaux->setEnabled(false);

    //On rempli le model detail
    idRemiseSelected = modelRemise->index(index.row(),0).data().toInt();
    modelRemiseDetail->setFilter("remise = "+QString::number(idRemiseSelected));

    nomtmp = modelRemise->index(index.row(),1).data().toString();
    prenomtmps = modelRemise->index(index.row(),2).data().toString();
    ui->labelRemiseAjoutNom->setText(nomtmp +" "+ prenomtmps);
    ui->comboRemiseAjoutBanque->setCurrentText(modelRemise->index(index.row(),3).data().toString());
    ui->lineRemiseAjoutNoCHQ->setText(modelRemise->index(index.row(),4).data().toString());
    ui->spinRemiseAjoutMontant->setValue(modelRemise->index(index.row(),5).data().toDouble());

}


void GTrans::on_spinRemiseAjoutFams_valueChanged(int arg1)
{
    if(arg1 != 0){

        //Si la valeur devient non nulle, on recherche les proms
        QSqlQueryModel *m = new QSqlQueryModel(this);
        QSqlQuery q(db);
        q.prepare("SELECT proms FROM v_users WHERE fams = :f");
        q.bindValue(":f",arg1);
        q.exec();
        m->setQuery(q);
        ui->comboRemiseAjoutProms->setModel(m);

    } else {

        //Si elle est nulle on reinitialise les proms (en supprimant le modele)
        QAbstractItemModel *m = ui->comboRemiseAjoutProms->model();
        delete m;
    }
}

void GTrans::on_comboRemiseAjoutProms_currentTextChanged(const QString &arg1)
{
    // Si la valeur de la fams est entrée
    if(ui->spinRemiseAjoutFams->value()!=0){

        //On remplie le label nom + prénom
        QSqlQuery q(db);
        q.prepare("SELECT nom, prenom FROM utilisateurs WHERE fams = :f AND proms = get_proms(:p)");
        q.bindValue(":f",ui->spinRemiseAjoutFams->value());
        q.bindValue(":p",arg1);
        q.exec();
        q.first();

        ui->labelRemiseAjoutNom->setText(q.value(0).toString() + " " + q.value(1).toString());
    } else {
        ui->labelRemiseAjoutNom->setText("");
    }

}

void GTrans::on_spinRemiseAjoutMontant_editingFinished()
{
    double arg1 = ui->spinRemiseAjoutMontant->value();

    if(modelRemiseDetail->rowCount() > 0){
        // Faire la somme et retirer ou ajouter le résultat à la première ligne
        double somme = 0.0;
        for(int i =0; i< modelRemiseDetail->rowCount(); i++){
            somme += modelRemiseDetail->index(i,5).data().toDouble();
        }

        somme -= arg1;

        // Si la nouvelle valeur est plus grande que l'ancienne la différence est entrée en négatif dans somme
        // Somme est donc la valeur qu'il faut retirer (donc rajoutée si elle est négative) à la première ligne

        if(somme < modelRemiseDetail->index(0,5).data().toDouble()){

            // Si la somme peut être ajoutée/retirée à la première ligne, elle l'est
            QSqlQuery q(dbRemise);
            q.prepare("UPDATE details SET montant = montant - :m WHERE id = :i");
            q.bindValue(":m",somme);
            q.bindValue(":i",modelRemiseDetail->index(0,0).data().toInt());
            q.exec();
            q.finish();

        } else if(somme > modelRemiseDetail->index(0,5).data().toDouble()) {

            // Si la somme ne peut pas être retirée, on retire toutes les lignes et on met le nouveau montant en première ligne
            for(int i =1; i< modelRemiseDetail->rowCount(); i++){
                on_tableRemiseAjoutPartage_clicked(modelRemiseDetail->index(i,0));
            }
            QSqlQuery q(dbRemise);
            q.prepare("UPDATE details SET montant = :m WHERE id = :i");
            q.bindValue(":m",arg1);
            q.bindValue(":i",modelRemiseDetail->index(0,0).data().toInt());
            q.exec();
            q.finish();
        }
        // Si on peux retirer au premier on le fait sinon on efface tout et on remet le premier à arg1

    } else {

        // Insérer une ligne
        if(ui->spinRemiseAjoutFams->value() > 0){

            int fams = ui->spinRemiseAjoutFams->value();
            QString proms = ui->comboRemiseAjoutProms->currentText();

            // On récupère la bucque
            QSqlQuery q1(db);
            q1.prepare("SELECT bucque FROM v_users WHERE fams = :f AND proms = :p");
            q1.bindValue(":f",fams);
            q1.bindValue(":p",proms);
            q1.exec();
            q1.first();

            // On insère la première ligne
            QSqlQuery q(dbRemise);
            q.prepare("INSERT INTO details (remise, bucque,fams,proms,montant) VALUES (0,:b,:f,:p,:m)");
            q.bindValue(":b",q1.value(0).toString());
            q.bindValue(":f",fams);
            q.bindValue(":p",proms);
            q.bindValue(":m",arg1);
            q.exec();
            q.finish();

            q1.finish();

        } else {
            // On appelle un ajout de compte
            on_buttonRemiseAjoutCompte_clicked();
        }

    }

    modelRemiseDetail->select();
}

void GTrans::on_buttonRemiseAjoutAutre_clicked()
{
    bool ok = false;
    QString n = QInputDialog::getText(this,"Nom","Entrez le nom",QLineEdit::Normal,"",&ok);
    if(ok){
        nomtmp = n;
        QString p = QInputDialog::getText(this,"Prénom","Entrez le prénom",QLineEdit::Normal,"",&ok);
        if(ok){
            prenomtmps = p;
        } else {
            nomtmp = "";
        }
    }

    if(ok){
        ui->labelRemiseAjoutNom->setText(nomtmp +" "+ prenomtmps);
    }
}

void GTrans::on_checkRemiseAjoutPartage_toggled(bool checked)
{
    if(checked){
        // Réactivation du bloc
        ui->tableRemiseAjoutPartage->setEnabled(true);
        ui->buttonRemiseAjoutCompte->setEnabled(true);
    } else {
        // Désactivation du bloc
        ui->tableRemiseAjoutPartage->setEnabled(false);
        ui->buttonRemiseAjoutCompte->setEnabled(false);

        // On ne garde que le premier
        if(modelRemiseDetail->rowCount() > 1){
            //On supprime toutes les lignes après la première
            for(int i =1; i< modelRemiseDetail->rowCount(); i++){
                on_tableRemiseAjoutPartage_clicked(modelRemiseDetail->index(i,0));
            }

            QSqlQuery q(dbRemise);
            q.prepare("UPDATE details SET montant = :m WHERE id = :i");
            q.bindValue(":m",ui->spinRemiseAjoutMontant->value());
            q.bindValue(":i",modelRemiseDetail->index(0,0).data().toInt());
            q.exec();
            q.finish();
            modelRemiseDetail->select();
        }
    }
}

void GTrans::on_buttonRemiseAjoutCompte_clicked()
{
    // On demande les informations
    bool ok = false;
        // On demande la fams
    int fams = QInputDialog::getInt(this,"Fam's","Fam's du compte à créditer",0,0,999,1,&ok);
    if(!ok){
        return;
    }
    QStringList l;
    QSqlQuery q1(db);
    q1.prepare("SELECT proms FROM v_users WHERE fams = :f");
    q1.bindValue(":f",fams);
    q1.exec();
    while(q1.next()){
        l.append(q1.value(0).toString());
    }
    q1.finish();
        // On demande la proms
    QString proms = QInputDialog::getItem(this,"Prom's","Prom's du compte à créditer",l,0,false,&ok);
    if(!ok){
        return;
    }
    double montant = 1000.0;
        // On demande le montant si ce n'est pas le premier
    if(modelRemiseDetail->rowCount() > 0){
        while(ok && montant > modelRemiseDetail->index(0,5).data().toDouble()){
            montant = QInputDialog::getDouble(this,"Montant","Montant à créditer sur ce compte",0,0,999.99,2,&ok);
        }
        if(!ok){
            return;
        }
    } else {
        montant = ui->spinRemiseAjoutMontant->value();
    }

    // ***

    // On Ajoute la ligne
        // Ajout de la ligne dans le model
    q1.prepare("SELECT bucque FROM v_users WHERE fams = :f AND proms = :p");
    q1.bindValue(":f",fams);
    q1.bindValue(":p",proms);
    q1.exec();
    q1.first();

    QSqlQuery q(dbRemise);
    q.prepare("INSERT INTO details (remise, bucque,fams,proms,montant) VALUES (:r,:b,:f,:p,:m)");
    q.bindValue(":r",idRemiseSelected);
    q.bindValue(":b",q1.value(0).toString());
    q.bindValue(":f",fams);
    q.bindValue(":p",proms);
    q.bindValue(":m",montant);
    q.exec();
    q.finish();

    q1.finish();

        // Modification du solde de la premiere ligne
    q.prepare("UPDATE details SET montant = montant - :m WHERE id = :i");
    q.bindValue(":m",montant);
    q.bindValue(":i",modelRemiseDetail->index(0,0).data().toInt());
    q.exec();
    q.finish();
    // ***

    modelRemiseDetail->select();
    ui->tableRemiseAjoutPartage->resizeColumnsToContents();
}


void GTrans::on_tableRemiseAjoutPartage_clicked(const QModelIndex &index)
{
    if(modelRemiseDetail->rowCount() > 1){
        // On reporte la somme sur la première ligne
        QSqlQuery q(dbRemise);
        q.prepare("UPDATE details SET montant = montant + :m WHERE id = :i");
        q.bindValue(":m",modelRemiseDetail->index(index.row(),5).data().toDouble());
        q.bindValue(":i",modelRemiseDetail->index(0,0).data().toInt());
        q.exec();
        q.finish();

        // On supprime la ligne
        q.prepare("DELETE FROM details WHERE id = :i");
        q.bindValue(":i",modelRemiseDetail->index(index.row(),0).data().toInt());
        q.exec();
        q.finish();
    }

    modelRemiseDetail->select();

}



void GTrans::on_buttonRemiseAjoutSupprimer_clicked()
{
    // Si une ligne de remise est selectionnée on la supprime
    if(idRemiseSelected != 0){
        QSqlQuery q(dbRemise);
        q.prepare("DELETE FROM remise WHERE id = :i");
        q.bindValue(":i",idRemiseSelected);
        q.exec();
        q.finish();
        // On supprime aussi les details correspondants
        q.prepare("DELETE FROM details WHERE remise = :i");
        q.bindValue(":i",idRemiseSelected);
        q.exec();
        q.finish();

        //Remise à zéro du filtre et modification de certains captions
        on_buttonRemiseAjoutAnnuler_clicked();
    }

    modelRemise->select();
    modelRemiseDetail->select();

}

void GTrans::on_buttonRemiseAjoutAnnuler_clicked()
{
    // Remise à zéro des variables
    idRemiseSelected = 0;
    nomtmp = "";
    prenomtmps = "";

    // On change le filtre du model Detail
    modelRemiseDetail->setFilter("remise = 0");

    // Remet à zéro tous les champs
    ui->labelRemiseAjoutNom->setText("");
    ui->spinRemiseAjoutFams->setValue(0);
    ui->spinRemiseAjoutMontant->setValue(0.0);
    ui->lineRemiseAjoutNoCHQ->setText("0000000");
    ui->comboRemiseAjoutBanque->setCurrentIndex(0);
    ui->checkRemiseAjoutPartage->setChecked(false);

    // On repasse en mode ajout
    ui->buttonRemiseFermer->setEnabled(true);
    ui->buttonRemiseAppliquer->setEnabled(true);
    ui->buttonRemiseImprimer->setEnabled(true);
    ui->buttonRemiseAjoutSupprimer->setEnabled(false);
    ui->buttonRemiseAjoutValider->setText("Ajouter");
    ui->buttonRemiseAjoutValider->setIcon(QIcon(":/icons/ressources/list-add.png"));
    ui->groupRemiseDetailAjout->setTitle("Ajouter un chèque");

    ui->tableRemiseNouveaux->setEnabled(true);

    //On redonne le focus pour une nouvelle entrée
    ui->spinRemiseAjoutFams->setFocus(Qt::TabFocusReason);

}



void GTrans::on_buttonRemiseAjoutValider_clicked()
{
    bool verif = true;

    // Récupération de nom et prénom
    if(nomtmp.isEmpty() || prenomtmps.isEmpty()){
        verif = false;
        if(ui->spinRemiseAjoutFams->value() != 0){
            verif = true;

            QSqlQuery q(db);
            q.prepare("SELECT nom, prenom FROM utilisateurs WHERE fams = :f AND proms = get_proms(:p)");
            q.bindValue(":f",ui->spinRemiseAjoutFams->value());
            q.bindValue(":p",ui->comboRemiseAjoutProms->currentText());
            verif &= q.exec();
            verif &= q.first();

            nomtmp = q.value(0).toString();
            prenomtmps = q.value(1).toString();
            q.finish();
        }

    }
    // On vérifie les autres champs
    verif &= !ui->lineRemiseAjoutNoCHQ->text().isEmpty();
    verif &= !ui->comboRemiseAjoutBanque->currentText().isEmpty();
    verif &= ui->spinRemiseAjoutMontant->value() > 0;

    // On enregistre les modifications
    if(verif){
        QSqlQuery q(dbRemise);

        //On créer ou modifie la ligne du model remise

        if(idRemiseSelected == 0){
            q.prepare("INSERT INTO remise (nom,prenom,banque,numero,montant) VALUES (:n,:p,:b,:c,:m)");
        } else {
            q.prepare("UPDATE remise SET nom = :n , prenom = :p , numero = :c , montant = :m WHERE id = :i");
            q.bindValue(":i",idRemiseSelected);
        }

        q.bindValue(":n",nomtmp);
        q.bindValue(":p",prenomtmps);
        q.bindValue(":b",ui->comboRemiseAjoutBanque->currentText());
        q.bindValue(":c",ui->lineRemiseAjoutNoCHQ->text());
        q.bindValue(":m",ui->spinRemiseAjoutMontant->value());
        q.exec();

        //Si c'est une insertion on récupère l'id
        if(idRemiseSelected == 0){
            idRemiseSelected = q.lastInsertId().toInt();
            q.finish();

            //On enregistre les modifications sur le modele détail
            q.prepare("UPDATE details SET remise = :r WHERE remise = 0");
            q.bindValue(":r",idRemiseSelected);
            q.exec();

        }

        q.finish();

        modelRemise->select();
        ui->tableRemiseNouveaux->resizeColumnsToContents();
        on_buttonRemiseAjoutAnnuler_clicked();

    } else {
        QMessageBox::warning(this,"Champs imcomplet","Les champs obligatoires sont nom/prénom (par l'intermédiaire de fams/proms ou autre), n°CHQ et montant.");
    }

}


void GTrans::on_buttonRemiseImprimer_clicked()
{
    // Création de la classe rapport
    QModelDataReport *rapport = new QModelDataReport(modelRemise,this);

    // Création des listes de paramètres
    QList<int> listofcolumns;
    QList<int> listofwidth;
    QStringList listofheader;
    QList<int> alignment;
    QList<QModelDataReport::dataFormat> tableformat;
    QList<QVariant> listTotaux;

    // Initialisation des formats spéciaux
    QModelDataReport::dataFormat dformatstring;
    dformatstring.strFormat="%1";
    dformatstring.typeFormat=QModelDataReport::typeIsQString;
    dformatstring.fieldwidthFormat=0;
    dformatstring.fillFormat="";
    QModelDataReport::dataFormat dformatdate;
    dformatdate.strFormat="%1";
    dformatdate.typeFormat=QModelDataReport::typeIsQDate;
    dformatdate.fieldwidthFormat=0;
    dformatdate.fillFormat="dd-MM-yy";
    QModelDataReport::dataFormat dformateuro;
    dformateuro.strFormat="%1€";
    dformateuro.typeFormat=QModelDataReport::typeIsCurrency;
    dformateuro.fieldwidthFormat=12;
    dformateuro.fillFormat="";

    // Initialisation des listes
    listofcolumns << 1 << 2 << 3 << 4 << 5 ;
    listofheader << "Nom" << "Prénom" << "Banque" << "N° Chèque" << "Montant" ;
    listofwidth << 30 << 25 << 25 << 10 << 10 ;
    alignment << (Qt::AlignLeft| Qt::AlignVCenter) << (Qt::AlignLeft | Qt::AlignVCenter) << (Qt::AlignRight | Qt::AlignVCenter) << (Qt::AlignRight | Qt::AlignVCenter) << (Qt::AlignRight | Qt::AlignVCenter);
    tableformat << dformatstring << dformatstring << dformatstring << dformatstring << dformateuro ;
    listTotaux << 0 << 0 << 0 << 0 << 0 ;

    // On passe les listes en paramètres
    rapport->setListofColumns(&listofcolumns);
    rapport->setColumnWidthPercentage(&listofwidth);
    rapport->setListofColumnsHeader(&listofheader);
    rapport->setCellsAlignment(&alignment);
    rapport->setCellsDataFormat(&tableformat);

    // On récupère le total
    rapport->getSumOfnumColumns(&listTotaux);

    // Définition des polices
    QFont font = this->font();
        // Titre
    font.setPointSize(16);
    rapport->setTitleFont(font);
    rapport->setTitleText("Remise de chèques");
        // Corps
    font.setPointSize(10);
    rapport->setBodyFont(font);
        // Headers
    font.setPointSize(12);
    rapport->setHeaderPageFont(font);
        // Sous-titre
    font.setPointSize(14);
    rapport->setHeaderReportFont(font);
    rapport->setHeaderReportHeight(25);
    rapport->setHeaderReportText("");
        // Pied
    font.setPointSize(14);
    rapport->setFooterPageFont(font);
    rapport->setFooterPageRightText("AE ENSAM Angers");
        // Fin de rapport
    font.setPointSize(14);
    rapport->setEndReportFont(font);
    rapport->setEndReportHeight(80);
    rapport->setEndReportText("Total : "+QString::number(listTotaux.at(4).toDouble(),'f',2)+" €");
    rapport->model_print();

}

void GTrans::on_buttonRemiseAppliquer_clicked()
{
    if(QMessageBox::question(this,"Appliquer les modifications","La remise sera appliquée dans la base. Etes vous sûr de vouloir continuer?") == QMessageBox::Yes){

        QSettings s;
        int compteAE = s.value("trans/compte",0).toInt();
        if(compteAE == 0){
            QMessageBox::critical(this,"Compte débiteur","Le compte débiteur pour les remises n'est pas défini");
            return;
        }

        QSqlQuery q(db);
        q.prepare("CALL faire_transaction(:d,get_compte(:f,get_proms(:p)),:m,:l)");
        q.bindValue(":d",compteAE);

        QSqlQuery q1(dbRemise);
        q1.prepare("SELECT d.id AS id, d.fams AS fams, d.proms AS proms, d.montant AS montant, r.numero AS numero FROM details AS d INNER JOIN remise AS r ON d.remise = r.id ORDER BY id");
        q1.exec();

        while(q1.next()){
            q.bindValue(":f",q1.value(1).toInt());
            q.bindValue(":p",q1.value(2).toString());
            q.bindValue(":m",q1.value(3).toDouble());
            q.bindValue(":l","Remise CHQ n° "+q1.value(4).toString());
            q.exec();
        }

        q1.finish();

        q.finish();

        if(QMessageBox::question(this,"Impression","Voulez vous imprimer ?") == QMessageBox::Yes){
            on_buttonRemiseImprimer_clicked();
        }


    }
}
